package com.example.theoretical_verification.collection;

import java.util.Comparator;
import java.util.TreeSet;

// 这个例子就是演示，如果构造函数给了比较器、元素实现了可比较接口，两个都有，那到底按照谁的来
// 比较器是逆序、可比较接口是顺序，最终结果如何
public class MyTreeSet04 {
    public static void main(String[] args) {
        TreeSet<Student02> treeSet = new TreeSet<>(new Comparator<Student02>() {
            @Override
            public int compare(Student02 o1, Student02 o2) {
                // o2在前，o1在后，应该就是按照名字来逆序吧
                int num = o2.getName().compareTo(o1.getName());
                // 名字相同按年龄逆序.也是o2在前，o1在后
                return num == 0 ? o2.getAge() - o1.getAge() : num;
            }
        });



        // 这个案例，走到下面add的时候会报错。应为Student01没有实现Comparable接口
        Student02 s = new Student02("E", 12);
        treeSet.add(s);
        Student02 s1 = new Student02("B", 23);
        treeSet.add(s1);
        Student02 s2 = new Student02("D", 25);
        treeSet.add(s2);
        Student02 s3 = new Student02("A", 35);
        treeSet.add(s3);
        Student02 s4 = new Student02("C", 15);
        treeSet.add(s4);
        Student02 s5 = new Student02("A", 21);
        treeSet.add(s5);

        System.out.println(treeSet);

        // 以下结果说明，如何两个都给，按照比价器的规则来。它有更高的优先级。
        //实际打印结果如下：
        //[Student{name='E', age=12}
        //, Student{name='D', age=25}
        //, Student{name='C', age=15}
        //, Student{name='B', age=23}
        //, Student{name='A', age=35}
        //, Student{name='A', age=21}
        //]

    }
}
